package com.cg.design.graphicdesignpattern.visitor;

import java.util.ArrayList;
import java.util.Iterator;

/**
 * 用于将带有指定后缀名的文件汇集起来
 *
 * @program: LeetCode->FileFindVisitor
 * @description: 用于将带有指定后缀名的文件汇集起来
 * @author: cg
 * @create: 2022-03-26 23:25
 **/
public class FileFindVisitor extends Visitor {

    /**
     * 文件类型，也就是后缀名
     */
    private final String fileType;

    private final ArrayList<Entry> found = new ArrayList();

    /**
     * 指定后缀名的构造方法
     *
     * @param fileType
     */
    public FileFindVisitor(String fileType) {
        this.fileType = fileType;
    }

    public Iterator<Entry> getFoundFiles() {
        // 获取已找到的文件
        return found.iterator();
    }

    @Override
    public void visit(File file) {
        // 在文件被访问时判断后缀
        if (file.getName().endsWith(fileType)) {
            found.add(file);
        }
    }

    @Override
    public void visit(Directory directory) {
        // 在访问文件夹时，迭代访问
        Iterator<Entry> iterator = directory.iterator();
        while (iterator.hasNext()) {
            iterator.next().accept(this);
        }
    }
}
